package com.safe.app.config.init.redis;

import java.util.List;
import java.util.Map;

/**
 * @author h2l
 * 自定义缓存接口定义，适用：redis、echace等缓存
 */
public interface CacheInterface {

    /**
     * 添加 元素到 cache
     *
     * @param key
     * @param value
     */
    void set(String key, Object value);

    /**
     * 添加 元素到 cache 并设置过期时间
     *
     * @param key
     * @param value
     * @param expirationTime ： 缓存过期时间（单位秒）
     */
    void set(String key, Object value, int expirationTime);

    /**
     * 添加 元素到 cache 并设置过期时间
     *
     * @param key
     * @param value
     * @param timeToIdleSeconds :缓存闲置 时间 （单位秒）
     * @param expirationTime    ： 缓存过期时间（单位秒）
     */
    void set(String key, Object value, int timeToIdleSeconds, int expirationTime);

    /**
     * 获取 cache内元素
     *
     * @param key
     * @return
     */
    Object get(String key);

    /**
     * 获取 cache内元素
     *
     * @param key
     * @return
     */
    <T> T get(String key, Class<T> clazz);

    /**
     * 获取 list 对象
     *
     * @param key
     * @param clazz list 对象内数据类型
     * @return
     */
    <T> List<T> getList(String key, Class<T> clazz);

    /**
     * 获取 map 对象
     *
     * @param key
     * @param keyClazz
     * @param valClazz
     * @return
     */
    <K, T> Map<K, T> getMap(String key, Class<K> keyClazz, Class<T> valClazz);

    /**
     * 删除
     *
     * @param key
     */
    void remove(String key);

    /**
     * 删除全部 数据
     */
    void removeAll();
}
